#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
//1.signal信号注册函数的使用
#if 0
void handle(int signo)
{
    printf("receive %d号信号\n",signo);
}
int main()
{
    signal(2,handle);//捕获2号信号
    while(1)  
    {
        printf("hello I am running\n");
        sleep(1);
    }
    return 0;
}
#endif


#if 0
void handle(int sig)
{
    printf("receive %d signal\n",sig);
}
int main()
{
    while(1)
    {
        printf("hello I am running\n");
        sleep(2);
        signal(3,handle);//注册3号信号的处理方法
        raise(3);//给当前进程发送指定信号
    }
    return 0;
}
#endif

#if 0
void handle(int sig)
{
    printf("receive %d signal\n",sig);
}
int main()
{
    while(1)
    {
        printf("hello I am running\n");
        sleep(2);
        signal(6,handle);//注册3号信号的处理方法
        abort();//给当前进程发送6号信号 默认是异常终止进程，abort函数执行总是成功的
    }
    return 0;
}
#endif

//alarm:定时给当前进程发送SIGALRM(14号)信号
//例子：统计1s可以将一个变量累加到多大
//注意：如果边累加边打印得出的值是很小的，因为IO所需的时间远大于累加的时间
//CPU处理的时间比IO操作的时间快很多
int count = 0;
void handle(int sig)
{
    printf("receive %d signal\n",sig);
    printf("count:%d\n",count);
    exit(0);
}
int main()
{
    signal(14,handle);//捕获14号信号
    alarm(1);//定时1s给当前进程发送14号信号
    while(1)
        count++;
    return 0;
}